import {
  getEnumGroupList,
  getEnumItemByGroupName,
  addEnumData,
  updateEnumGroup,
  addEnumItem,
  deleteEnumGroupByGroupName,
  deleteEnumItemByItemId,
} from "@/api/enum";

export default {
  data() {
    return {
      // 父表格数据
      tableData: [],

      // 分页设置
      layout: "total, sizes, prev, pager, next, jumper",
      pageData: {
        currentPage: 1,
        pageSize: 20,
        total: 0,
      },

      // 控制添加枚举组弹窗的弹出
      addEnumGroupDialogForm: false,
      // 设置弹出框标题头
      title: "添加枚举组数据",
      // 控制枚举组信息是否可以修改
      isEditEnumGroupName: false,
      isEditEnumGroupTitle: false,
      isEditEnumGroupDescription: false,
      // 添加的枚举组数据
      enumData: {
        enumGroup: {
          enumGroupName: "",
          enumGroupTitle: "",
          enumGroupDescription: "",
        },
        enumItemList: [
          {
            enumItemKey: "",
            enumItemValue: "",
          },
        ],
      },

      // 弹出窗中label宽度
      formLabelWidth: "120px",
      // 弹窗中表格多选选中的数据
      multipleSelection: [],

      // 控制修改枚举组信息弹出框消失显示
      editEnumGroupDialogForm: false,
      // 修改枚举组信息的数据
      editEnumGroupData: {
        enumGroupName: "",
        enumGroupTitle: "",
        enumGroupDescription: "",
      },
      // 修改枚举组信息的校验规则
      editEnumGroupDataRules: {
        enumGroupName: [
          {
            required: true,
            message: "请完善枚举组英文名信息",
            trigger: "blur",
          },
        ],
        enumGroupTitle: [
          {
            required: true,
            message: "请完善枚举组中文名信息",
            trigger: "blur",
          },
        ],
        enumGroupDescription: [
          { required: true, message: "请完善枚举组描述信息", trigger: "blur" },
        ],
      },
    };
  },

  methods: {
    // 获取枚举组数据列表
    getEnumGroupData() {
      getEnumGroupList().then((res) => {
        this.tableData = res.data;
        this.pageData.total =
          this.tableData == null ? 0 : this.tableData.length;
      });
    },

    // 当前页发生改变
    handleCurrentChange(val) {
      this.pageData.currentPage = val;
    },
    // 当前页大小发生改变
    handleSizeChange(val) {
      this.pageData.pageSize = val;
    },

    // 点击编辑按钮触发事件
    handleEditEnumGroup(index, row) {
      this.editEnumGroupData.enumGroupName = row.enumGroupName;
      this.editEnumGroupData.enumGroupTitle = row.enumGroupTitle;
      this.editEnumGroupData.enumGroupDescription = row.enumGroupDescription;
      this.editEnumGroupDialogForm = true;
    },
    // 修改枚举组信息事件
    handleEditEnumGroupData() {
      this.$refs.editEnumGroupData.validate((valid) => {
        if (valid) {
          updateEnumGroup(this.editEnumGroupData).then((res) => {
            if (res.code == 200) {
              this.$message.success(res.message);
              this.getEnumGroupData();
              this.resetEditEnumGroupDataInput();
              this.editEnumGroupDialogForm = false;
            } else {
              this.$message.error(res.message);
            }
          });
        }
      });
    },
    // 重置修改枚举组信息弹窗输入框
    resetEditEnumGroupDataInput() {
      this.$refs.editEnumGroupData.resetFields();
    },

    // 改变枚举组信息为不可写状态
    changeDisabledStatusTrue() {
      this.isEditEnumGroupName = true;
      this.isEditEnumGroupTitle = true;
      this.isEditEnumGroupDescription = true;
    },

    // 改变枚举组信息为可写状态
    changeDisabledStatusFalse() {
      this.isEditEnumGroupName = false;
      this.isEditEnumGroupTitle = false;
      this.isEditEnumGroupDescription = false;
    },

    // 点击添加枚举项触发事件
    handleAddEnumItem(index, row) {
      this.enumData.enumGroup.enumGroupName = row.enumGroupName;
      this.enumData.enumGroup.enumGroupTitle = row.enumGroupTitle;
      this.enumData.enumGroup.enumGroupDescription = row.enumGroupDescription;
      this.changeDisabledStatusTrue();
      this.title = "添加枚举项数据";
      this.addEnumGroupDialogForm = true;
    },

    // 点击枚举组展开触发事件
    handleExpandRow(row, expandedRows) {
      if (!row.items) {
        this.getEnumItemData(row.enumGroupName);
      }
      this.$refs.enumGroupData.toggleRowExpansion(row);
    },

    // 获取单个枚举组下枚举项数据
    getEnumItemData(groupName) {
      let self = this;
      getEnumItemByGroupName(groupName).then((res) => {
        const index = self.tableData.findIndex(
          (data) => data.enumGroupName === groupName
        );
        self.$set(self.tableData[index], "items", res.data);
      });
    },

    // 点击删除枚举组按钮触发事件
    handleDeleteEnumGroup(index, row) {
      deleteEnumGroupByGroupName(row.enumGroupName).then((res) => {
        this.$message.success(res.message);
        this.getEnumGroupData();
      });
    },

    // 点击删除枚举项按钮触发事件
    handleDeleteEnumItem(index, row) {
      deleteEnumItemByItemId(row.enumItemId).then((res) => {
        this.$message.success(res.message);
        this.getEnumItemData(row.enumGroupName);
      });
    },

    // 弹窗中添加枚举项按钮触发事件
    handleAddEnumItemData() {
      this.enumData.enumItemList.push({
        enumItemKey: "",
        enumItemValue: "",
      });
    },

    // 弹窗中删除选中枚举项按钮触发事件
    handleDeleteEnumItemData() {
      console.log(this.multipleSelection);
      let enumItemList = [];
      this.enumData.enumItemList.forEach((oldEnumItem) => {
        let flag = true;
        this.multipleSelection.forEach((deletedEnumItem) => {
          if (oldEnumItem.enumItemKey === deletedEnumItem.enumItemKey) {
            flag = false;
          }
        });
        if (flag) {
          enumItemList.push(oldEnumItem);
        }
      });
      this.enumData.enumItemList = enumItemList;
    },

    // 设置弹出窗中动态添加枚举项的序号值
    rowClassName({ row, rowIndex }) {
      row.xh = rowIndex + 1;
    },

    // 弹出窗中表格多选框内容改变触发事件
    handleDetailSelectionChange(selection) {
      this.multipleSelection = selection;
    },

    // 提交添加枚举数据
    handleAddEnumData() {
      this.$refs.enumData.validate((valid) => {
        if (valid) {
          if (!this.isEditEnumGroupName) {
            this.addEnumGroupData();
          } else {
            this.addEnumItemData();
          }
        }
      });
    },
    // 重置添加枚数据弹窗输入框内容
    resetAddEnumDataInput() {
      this.$refs.enumData.resetFields();
    },

    // 添加枚举组数据
    addEnumGroupData() {
      addEnumData(this.enumData).then((res) => {
        if (res.code == 200) {
          this.getEnumGroupData();
          this.$message.success(res.message);
          this.resetAddEnumDataInput();
          this.addEnumGroupDialogForm = false;
          this.enumData.enumItemList = [
            {
              enumItemKey: "",
              enumItemValue: "",
            },
          ];
        } else {
          this.$message.error(res.message);
        }
      });
    },

    // 添加枚举项数据
    addEnumItemData() {
      addEnumItem(this.enumData).then((res) => {
        if (res.code == 200) {
          this.getEnumGroupData();
          this.$message.success(res.message);
          this.resetAddEnumDataInput();
          this.addEnumGroupDialogForm = false;
          this.title = "添加枚举组数据";
          this.enumData.enumItemList = [
            {
              enumItemKey: "",
              enumItemValue: "",
            },
          ];
        } else {
          this.$message.error(res.message);
        }
      });
    },
  },

  mounted() {
    this.getEnumGroupData();
  },
};
